package org.swellrt.server.box.servlet; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonParser; public abstract class ServiceData { private static JsonParser jsonParser = new JsonParser(); private static Gson gson = new Gson(); public static ServiceData fromJson(String json, Class<? extends ServiceData> classOf) throws JsonParseException { ServiceData object = null; JsonElement element = jsonParser.parse(json); if (element == null) throw new JsonParseException("Element is null"); object = gson.fromJson(element, classOf); if (element.isJsonObject()) object.set(element.getAsJsonObject()); return object; } public static ServiceData[] arrayFromJson(String json, Class<? extends ServiceData[]> classOf) throws JsonParseException { ServiceData[] object = null; JsonElement element = jsonParser.parse(json); if (element == null) throw new JsonParseException("Element is null"); object = gson.fromJson(element, classOf); JsonArray array = element.getAsJsonArray(); for (int i = 0; i < object.length && i < array.size(); i++) { object[i].set(array.get(i).getAsJsonObject()); } return object; } /** * The original raw JsonObject */ private JsonObject json; public ServiceData() { this.json = null; } private void set(JsonObject json) { this.json = json; } /** * Check if a field of this object was set in the original Json * @param field * @return true if the field was in the original Json */ public boolean has(String field) { return json.has(field); } public String toJson() { return gson.toJson(this); } }